package com.thread.sync.sync11;

import java.util.concurrent.CountDownLatch;

public class ConUtil01 {

    public static void main(String[] args) {
        /**
         * 用于监听某些初始化操作,等待初始化执行完毕后,通知主线程继续执行
         * 2: 表示await()时监听2个线程的初始化操作,2个线程如果都完成初始化,再继续执行
         */
        CountDownLatch cdl = new CountDownLatch(2);
        new Thread(() -> {
            try {
                System.out.println("进入线程t1" + "等待其他线程处理完成...");
                cdl.await();//进入等待,等待其他线程完成相应操作
                System.out.println("其他线程初始化完成,t1继续执行.....");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "t1").start();
        new Thread(() -> {
            try {
                System.out.println("t2线程进行初始化");
                Thread.sleep(2000);//初始化操作
                System.out.println("t2完成初始化");
                cdl.countDown();//通知等待的线程,已完成操作
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "t2").start();
        new Thread(() -> {
            try {
                System.out.println("t3线程进行初始化");
                Thread.sleep(2000);//初始化操作
                System.out.println("t3完成初始化");
                cdl.countDown();//通知等待的线程,已完成操作
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "t3").start();
    }

}
